libelf cannot rely on the strlcpy() BSD-ism.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Mon, 29 Jan 2007 11:47:00 +0000 (11:47 +0000)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Mon, 29 Jan 2007 11:47:00 +0000 (11:47 +0000)
Make a private definition based on strncpy and strlen.
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/common/libelf/libelf-dominfo.c
xen/common/libelf/libelf-private.h

index d3ddcdb6fe678d7dde3111ba689289e06ef7779b..c353acde162d368e9881f53f1c3f587c5bdcaf16 100644 (file)
@@ -128,16 +128,16 @@ int elf_xen_parse_note(struct elf_binary *elf,
     switch (type)
     {
     case XEN_ELFNOTE_LOADER:
-       strlcpy(parms->loader, str, sizeof(parms->loader));
+       elf_strlcpy(parms->loader, str, sizeof(parms->loader));
        break;
     case XEN_ELFNOTE_GUEST_OS:
-       strlcpy(parms->guest_os, str, sizeof(parms->guest_os));
+       elf_strlcpy(parms->guest_os, str, sizeof(parms->guest_os));
        break;
     case XEN_ELFNOTE_GUEST_VERSION:
-       strlcpy(parms->guest_ver, str, sizeof(parms->guest_ver));
+       elf_strlcpy(parms->guest_ver, str, sizeof(parms->guest_ver));
        break;
     case XEN_ELFNOTE_XEN_VERSION:
-       strlcpy(parms->xen_ver, str, sizeof(parms->xen_ver));
+       elf_strlcpy(parms->xen_ver, str, sizeof(parms->xen_ver));
        break;
     case XEN_ELFNOTE_PAE_MODE:
        if (0 == strcmp(str, "yes"))
@@ -224,13 +224,13 @@ int elf_xen_parse_guest_info(struct elf_binary *elf,
 
        /* strings */
        if (0 == strcmp(name, "LOADER"))
-           strlcpy(parms->loader, value, sizeof(parms->loader));
+           elf_strlcpy(parms->loader, value, sizeof(parms->loader));
        if (0 == strcmp(name, "GUEST_OS"))
-           strlcpy(parms->guest_os, value, sizeof(parms->guest_os));
+           elf_strlcpy(parms->guest_os, value, sizeof(parms->guest_os));
        if (0 == strcmp(name, "GUEST_VER"))
-           strlcpy(parms->guest_ver, value, sizeof(parms->guest_ver));
+           elf_strlcpy(parms->guest_ver, value, sizeof(parms->guest_ver));
        if (0 == strcmp(name, "XEN_VER"))
-           strlcpy(parms->xen_ver, value, sizeof(parms->xen_ver));
+           elf_strlcpy(parms->xen_ver, value, sizeof(parms->xen_ver));
        if (0 == strcmp(name, "PAE"))
        {
            if (0 == strcmp(value, "yes[extended-cr3]"))
index 4d9ef5ba4f7e3dbd4ff9ae267ce54cb1c4eac99a..146251fe0021cdd21f40a011b33299b0c1af576a 100644 (file)
@@ -21,6 +21,8 @@
 #define bswap_32(x) swab32(x)
 #define bswap_64(x) swab64(x)
 
+#define elf_strlcpy(d,s,c) strlcpy(d,s,c)
+
 #else /* !__XEN__ */
 
 #include <stdio.h>
         xc_set_error(XC_INVALID_KERNEL, fmt , ## args );  \
        } while (0)
 
+/* SysV unices have no strlcpy/strlcat. */
+static inline size_t elf_strlcpy(char *dest, const char *src, size_t size)
+{
+    strncpy(dest, src, size-1);
+    dest[size-1] = '\0';
+    return strlen(src);
+}
+
 #endif
 
 #endif /* __LIBELF_PRIVATE_H_ */